package com.ref.entity;

import java.lang.reflect.Constructor;

/**
 * @author wzm
 * @create 2023-02-14 10:08
 */
//测试反射获取类的构造方法
public class ReflectTest2 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
       //1.获取class字节码文件对象
        Class clazz = Class.forName("com.ref.entity.Student");
        
        //2.获取构造方法的对象
        //获取所有公开的构造方法
        Constructor[] constructors = clazz.getConstructors();
        for (Constructor c:constructors) {
            System.out.println("c = " + c);
        }

        System.out.println("**********************************");

        //获取带私有（+public）的构造方法
        Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
        for (Constructor c:declaredConstructors) {
            System.out.println("c = " + c);
        }

        System.out.println("**********************************");
        
        //获取空参构造方法
        Constructor con1 = clazz.getConstructor();
        
        //获取指定包含某个参数的构造方法  参数需要类的字节码文件
        Constructor constructor = clazz.getConstructor(String.class, int.class);

        System.out.println("**********************************");
        //也可以获取指定的构造方法 但是与上面不同的可以获取私有的  公开的也可以
        Constructor con2 = clazz.getDeclaredConstructor(String.class);
        System.out.println("con2 = " + con2);


    }
}
